package com.doctracker;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

/**
 * 文件检索工具主程序入口类
 * 启动JavaFX应用程序
 */
public class DocumentTrackerApp extends Application {
    
    /**
     * 应用程序标题
     */
    private static final String APP_TITLE = "文件提交检查工具 v1.0";
    
    /**
     * 窗口最小宽度
     */
    private static final double MIN_WIDTH = 900;
    
    /**
     * 窗口最小高度
     */
    private static final double MIN_HEIGHT = 600;
    
    /**
     * 窗口默认宽度
     */
    private static final double DEFAULT_WIDTH = 1000;
    
    /**
     * 窗口默认高度
     */
    private static final double DEFAULT_HEIGHT = 700;
    
    /**
     * 启动JavaFX应用程序
     * 
     * @param primaryStage 主舞台
     * @throws Exception 启动异常
     */
    @Override
    public void start(Stage primaryStage) throws Exception {
        System.out.println("启动文件检索工具应用程序...");
        
        try {
            // 加载FXML文件
            System.out.println("加载主界面FXML文件...");
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("/fxml/main.fxml"));
            Parent root = loader.load();
            
            // 创建场景
            System.out.println("创建应用程序场景...");
            Scene scene = new Scene(root, DEFAULT_WIDTH, DEFAULT_HEIGHT);
            
            // 加载CSS样式
            System.out.println("加载CSS样式文件...");
            String cssPath = getClass().getResource("/css/styles.css").toExternalForm();
            scene.getStylesheets().add(cssPath);
            
            // 配置主窗口
            primaryStage.setTitle(APP_TITLE);
            primaryStage.setScene(scene);
            primaryStage.setMinWidth(MIN_WIDTH);
            primaryStage.setMinHeight(MIN_HEIGHT);
            
            // 设置窗口图标
            try {
                primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/icons/app-icon.png")));
                System.out.println("应用图标加载成功");
            } catch (Exception iconException) {
                System.err.println("无法加载应用图标: " + iconException.getMessage());
            }
            
            // 设置窗口关闭事件
            primaryStage.setOnCloseRequest(event -> {
                System.out.println("用户关闭应用程序");
                // 这里可以添加保存配置、清理资源等操作
            });
            
            // 显示窗口
            System.out.println("显示主窗口");
            primaryStage.show();
            
            System.out.println("应用程序启动完成！");
            
        } catch (Exception e) {
            System.err.println("启动应用程序失败: " + e.getMessage());
            e.printStackTrace();
            
            // 显示错误信息给用户
            showStartupError(e);
            throw e;
        }
    }
    
    /**
     * 显示启动错误信息
     * 
     * @param exception 异常对象
     */
    private void showStartupError(Exception exception) {
        try {
            javafx.scene.control.Alert alert = new javafx.scene.control.Alert(javafx.scene.control.Alert.AlertType.ERROR);
            alert.setTitle("启动错误");
            alert.setHeaderText("应用程序启动失败");
            alert.setContentText("错误详情: " + exception.getMessage() + "\n\n请检查程序安装是否完整。");
            alert.showAndWait();
        } catch (Exception e) {
            // 如果连错误对话框都无法显示，则输出到控制台
            System.err.println("无法显示错误对话框: " + e.getMessage());
        }
    }
    
    /**
     * 程序主入口点
     * 
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        System.out.println("========================================");
        System.out.println("        文件提交检查工具 v1.0");
        System.out.println("========================================");
        System.out.println("Java版本: " + System.getProperty("java.version"));
        System.out.println("操作系统: " + System.getProperty("os.name") + " " + System.getProperty("os.version"));
        System.out.println("工作目录: " + System.getProperty("user.dir"));
        System.out.println("用户主目录: " + System.getProperty("user.home"));
        System.out.println("========================================");
        
        try {
            // 设置JavaFX线程异常处理器
            Thread.setDefaultUncaughtExceptionHandler((thread, exception) -> {
                System.err.println("未捕获的异常在线程 " + thread.getName() + ": " + exception.getMessage());
                exception.printStackTrace();
            });
            
            // 启动JavaFX应用程序
            System.out.println("正在启动JavaFX应用程序...");
            launch(args);
            
        } catch (Exception e) {
            System.err.println("程序启动失败: " + e.getMessage());
            e.printStackTrace();
            System.exit(1);
        }
        
        System.out.println("程序已退出");
    }
} 